跳到主要内容

1.4.3 if语句

if语句通常会创建一个2选1的多路复用器,如果条件为真,则选择一个输入;如果条件为假,则选择另一个输入。

always @(*) begin
if (condition) begin
out = x;
end
else begin
out = y;
end
end

alt text

这等同于使用带条件运算符的连续赋值语句:

assign out = (condition) ? x : y;

然而,过程性if语句引入了一种犯错的新方式。只有当out总是被赋予一个值时,这个电路才是组合逻辑电路。

实践练习:

构建一个2选1的多路复用器,在a和b之间进行选择。如果sel_b1和sel_b2都为真,则选择b。否则,选择a。分别使用assign语句和过程性if语句做两次。

sel_b1sel_b2out_assign out_always
00a
01a
10a
11b

模块声明

// synthesis verilog_input_version verilog_2001
module top_module(
input a,
input b,
input sel_b1,
input sel_b2,
output wire out_assign,
output reg out_always );

做题区